package handle // 一个包下 不可以命名不同的包名

// package main

import (
	"context" //引用 package
	"gPublic/Logic"
	_ "log"
	_ "net"

	// _ "gPublic/grpc/pubData/go" //引用protoc生成的go package
	pb "gPublic/grpc/yz-pub-data/pubData"

	_ "google.golang.org/grpc"
	_ "google.golang.org/grpc/credentials/insecure"
	// grpc 元数据验证包
)

type ServerPubData struct {
	pb.UnimplementedPbuDataServer
}

type PList struct {
	Linke string `json:"linke"`
	Id    int64  `json:"id"`
	Title string `json:"title"`
}

// 实现 GetPubData 函数
func (s *ServerPubData) GetPubData(ctx context.Context, req *pb.PubRequest) (*pb.PubReply, error) {

	// token验证 获取元数据信息
	// md, ok := metadata.FromIncomingContext(ctx)

	// // md = metadata.MD{":authority":[]string{"127.0.0.1:5904"}, "appid":[]string{"123456"}, "appkey":[]string{"kkkey"}, "content-type":[]string{"application/grpc"}, "user-agent":[]string{"grpc-go/1.66.0"}}
	// if !ok {
	// 	return nil, errors.New("no token")
	// }

	// var appId, appKey string
	// if v, ok := md["appid"]; ok { // 过来之后都是小写
	// 	appId = v[0]
	// }
	// if v, ok := md["appkey"]; ok {
	// 	appKey = v[0]
	// }

	// if appId != "123456" || appKey != "kkkey" {
	// 	return nil, errors.New("token is error")
	// }

	r := &pb.PubMenu{}

	Partner := []PList{
		{Id: 101, Linke: "Partner 1", Title: "Partner 1"},
		{Id: 102, Linke: "Partner 2", Title: "Partner 2"},
	}

	for _, p := range Partner {
		partner := &pb.Partner{
			Id:    p.Id,
			Linke: p.Linke,
			Title: p.Title,
		}

		r.PartnerList = append(r.PartnerList, partner)
	}

	tree := Logic.GetMenuTreeLogic()

	r.Id = 22
	r.WebMenus = tree
	r.WebTitle = "webTitle"

	return &pb.PubReply{PubMenu: r}, nil
}

// 实现 GetTest 函数
// func (s *ServerPubData) GetTest(ctx context.Context, req *pb.TestRequest) (*pb.TestReply, error) {

// 	return &pb.TestReply{Name: "webTitle"}, nil
// }

// func main() {
// 	lis, err := net.Listen("tcp", ":5904")
// 	if err != nil {
// 		log.Fatalf("failed to listen: %v", err)
// 	}

// 	// 创建一个grpc serverPubData // 如果只是token验证 就在方法中实现就可以
// 	s := grpc.NewServer(grpc.Creds(insecure.NewCredentials())) // grpc.Creds(insecure.NewCredentials()) 不进行安全验证 ssl/tls

// 	// 注册服务
// 	pb.RegisterPbuDataServer(s, &ServerPubData{})

// 	// 启动服务
// 	if err := s.Serve(lis); err != nil {
// 		log.Fatalf("failed to serve: %v", err)
// 	}
// }
